perm filename VIX2SB.FAI[VIS,HPM]1 blob
sn#150658 filedate 1975-03-18 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE VIX2SB
C00009 00003 X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D ↔ BT←ARRY2
C00014 00004 GRYUP: 0
C00015 00005 TONUP: 0
C00016 00006 TABLES FOR FRACTIONATING ERRORS FOR THE HALFTONE ALGORITHM
C00020 ENDMK
C⊗;
TITLE VIX2SB
EXTERN XL,YH,XSC,YSC
EXTERN SLINE,DBUF,BSK,SCRTCH
EXTERN CORGET,CORREL
ENTRY VID
DWINXL: 0
DWINYL: 0
DWINXH: 21*40-1
DWINYH: 740
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13
T←1 ↔ TT←2 ↔ TTT←3 ↔ ARRY1←4 ↔ ARRY2←5 ↔ P←17
A←6 ↔ B←7 ↔ C←10 ↔ D←11 ↔ E←13 ↔ F←14 ↔ G←15
RETAD: 0
TEMP: BLOCK 25 ;TEMPORARY STORAGE FOR STUFF
DEFINE FLOAT(N)
< TLC N,232000
FADR N,N >
OPDEF FIX[247000233000]
X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D ↔ BT←ARRY2
THIS←←TT ↔ SIZ←←TTT
XCNTR←←TEMP ↔ YCNTR←←TEMP+1 ↔ DELX←←TEMP+2 ↔ DELY←←TEMP+3
PICX←←TEMP+4 ↔ PICY←←TEMP+5 ↔ DDLIN←←TEMP+6 ↔ LINB←←TEMP+7
VID: POP P,RETAD ;PUT UP BITS BT (A MASK, USUALLY ONLY ONE BIT
POP P,BT ;IS ON, IF MULTIPLE BITS ARE ON, THEY ARE OR'D)
POP P,ARRY1 ;OF PICTURE PIC INTO DD RECTANGLE X1-X2,Y1-Y2
POP P,Y2 ; VIDEO(X1,Y1,X2,Y2,PIC,BT)
FSBR Y2,YH ;IF BT IS -1,
FMPR Y2,YSC ;PUT UP A RANDOM DOT REPRESENTATION INSTEAD
FIX Y2,
POP P,X2
FSBR X2,XL
FMPR X2,XSC
FIX X2,
POP P,Y1
FSBR Y1,YH
FMPR Y1,YSC
FIX Y1,
POP P,X1
FSBR X1,XL
FMPR X1,XSC
FIX X1,
CAML X1,X2 ;PUT UP THE BITS MASKED BY BT
EXCH X1,X2 ;OF PICTURE ARRY IN DD BUFFER
CAML Y1,Y2 ;RECTANGLE X1-X2, Y1-Y2
EXCH Y1,Y2
HRREI T,1(X2) ;CALCULATE WIDTH AND HEIGHT,
SUB T,X1 ;IN DATA DISC PIXELS,
MOVEM T,XCNTR ;OF THE FULL PICTURE
HRREI T,1(Y2)
SUB T,Y1 ;THEN CALCULATE THE
MOVEM T,YCNTR ;STEP SIZE THROUGH THE ORIGINAL
HRLZ T,LNBY(ARRY1) ;PICTURE EACH DD PIXEL REPRESENTS,
IDIV T,XCNTR ;AS A FIXED POINT WRD WITH THE
MOVEM T,DELX ;RADIX POINT IN THE MIDDLE
HRLZ T,PCLN(ARRY1)
IDIV T,YCNTR
MOVEM T,DELY
SETZ PICY
CAML Y1,DWINYL ;CHECK IF LOWER AND UPPER
JRST YLOK
MOVN T,Y1 ;BOUNDS OF THE IMAGE EXCEED THE
IMUL T,DELY ;EXTERNAL WINDOWING CONSTRAINTS
MOVEM T,PICY
MOVE Y1,DWINYL
YLOK: CAMLE Y2,DWINYH
MOVE Y2,DWINYH
SETZ PICX
CAML X1,DWINXL
JRST XLOK
MOVN T,X1
IMUL T,DELX
MOVEM T,PICX
MOVE X1,DWINXL
XLOK: CAMLE X2,DWINXH
MOVE X2,DWINXH
CAMG X1,X2 ;IF THIS PROCESS LEAVES NOTHING,
CAMLE Y1,Y2 ;WE CAN QUIT
JRST @RETAD
SUBM X1,X2 ;GENERATE LOOP COUNTERS
SUBM Y1,Y2
HRLI X1,-1(X2)
HRLI Y1,-1(Y2)
HLRE SIZ,Y1
MOVN SIZ,SIZ ;RESERVE SPACE FOR BYTE PNTR TABLE
PUSHJ P,CORGET
HALT
MOVEM THIS,DDLIN
MOVE E,DELY
MOVE T,Y1 ;GENERATE TABLE OF LINE ADDRESSES
HRR T,DDLIN
HRLZI TT,LINTAB(ARRY1)
ADD TT,PICY
YLLP: HLRZ TTT,TT ;INTO THE ACTUAL PICTURE COLUMNS WHICH
RTF: MOVE TTT,(TTT) ;CORRESPOND TO DD COLUMNS
MOVEM TTT,(T)
ADD TT,E
AOBJN T,YLLP
CAMN BT,[-1]
JRST [ JSR TONUP
JRST DONE ]
CAMN BT,[-2]
JRST [ JSR HAFUP
JRST DONE ]
JSR GRYUP
DONE: MOVE THIS,DDLIN
PUSHJ P,CORREL
JRST @RETAD
GRYUP: 0
HRRM BT,TI
MOVN T,Y1
ADD T,DDLIN
HRRM T,YLP
HRLZ E,BPTAB(ARRY1)
ADD E,PICX
XLP: HRRZ T,X1
LSH T,-5
ADD T,[ORM F,DBUF(TT)]
HRRM T,TJ
HRRZ F,X1
ANDI F,37
MOVE F,BSK(F)
MOVE T,Y1
HLRZ TTT,E
MOVE TTT,(TTT)
TLO TTT,TT ;SET UP INDEX FIELD IN BYTE PNTR
YLP: MOVE TT,(T) ;ALTERED TO REFERENCE THE DDLIN TABLE
LDB 0,TTT
MOVE TT,SLINE(T)
TI: TRNE 0,BT ;REPLACED BY ACTUAL MASK
TJ: ORM F,DBUF(TT) ;ADD WORD NUMBER WITHIN SCANLINE
AOBJN T,YLP
ADD E,DELX
AOBJN X1,XLP
JRST @GRYUP
TONUP: 0
MOVN BT,BYBI(ARRY1)
SUBI BT,1
HRRM BT,TI1
MOVEI BT,77753
MOVN T,Y1
ADD T,DDLIN
HRRM T,YLP1
HRLZ E,BPTAB(ARRY1)
ADD E,PICX
XLP1: HRRZ T,X1
LSH T,-5
ADD T,[ORM F,DBUF(TT)]
HRRM T,TJ1
HRRZ F,X1
ANDI F,37
MOVE F,BSK(F)
MOVE T,Y1
HLRZ TTT,E
MOVE TTT,(TTT)
TLO TTT,TT ;SET UP INDEX FIELD IN BYTE PNTR
YLP1: MOVE TT,(T) ;ALTERED TO REFERENCE THE DDLIN TABLE
LDB 0,TTT
MOVE TT,SLINE(T)
TI1: ROT 0,-5 ;REPLACED BY ACTUAL MASK
IMULI BT,400003
CAMLE 0,BT
TJ1: ORM F,DBUF(TT) ;ADD WORD NUMBER WITHIN SCANLINE
AOBJN T,YLP1
ADD E,DELX
AOBJN X1,XLP1
JRST @TONUP
;TABLES FOR FRACTIONATING ERRORS FOR THE HALFTONE ALGORITHM
FOR I←-20,-1,1 { (3*I+10)/20
}
T1: FOR I←0,40,1 { (3*I+10)/20
}
FOR I←-20,-1,1 { (5*I+10)/20
}
T2: FOR I←0,40,1 { (5*I+10)/20
}
FOR I←-20,-1,1 { (I+10)/20
}
T3: FOR I←0,40,1 { (I+10)/20
}
FOR I←-20,-1,1 {I-(((3*I+10)/20)+((5*I+10)/20)+((I+10)/20))
}
T4: FOR I←0,40,1 {I-(((3*I+10)/20)+((5*I+10)/20)+((I+10)/20))
}
HAFUP: 0 ;HIGH QUALITY HALFTONES
HLRE SIZ,Y1
MOVN SIZ,SIZ
ADDI SIZ,2
PUSHJ P,CORGET
HALT
SETZ (THIS) ;RESERVE AND CLEAR A
HRL 0,THIS ;LINE BUFFER
HRRI 0,1(THIS)
MOVEI T,-1(THIS)
ADD T,SIZ
BLT 0,(T)
MOVEM THIS,LINB ;CREATE REFERENCES TO THE
SUBI THIS,(Y1) ;LINE BUFFER
HRRM THIS,LBM1
ADDI THIS,1
HRRM THIS,LB
ADDI THIS,1
HRRM THIS,LBP1
MOVN T,Y1
ADD T,DDLIN
HRRM T,YLP2
MOVN T,BYBI(ARRY1) ;SET UP SHIFT COUNT
ADDI T,4 ;FOR REDUCTION OF PIXELS
HRRM T,SHIF ;TO FOUR BITS
HRLZ E,BPTAB(ARRY1)
ADD E,PICX
XLP2: HRRZ T,X1
LSH T,-5
ADD T,[ORM F,DBUF(TT)]
HRRM T,TJ2
HRRZ F,X1
ANDI F,37
MOVE F,BSK(F)
MOVE T,Y1
HLRZ TTT,E
MOVE TTT,(TTT)
TLO TTT,TT ;SET UP INDEX FIELD IN BYTE PNTR
SETZB C,D
YLP2: MOVE TT,(T) ;ALTERED TO REFERENCE THE DDLIN TABLE
LDB 0,TTT
SHIF: LSH 0,0 ;STRIP IT TO FOUR BITS
ADD C,0
ADD C,D
CAIGE C,10
JRST NOTDOT
MOVE TT,SLINE(T)
TJ2: ORM F,DBUF(TT) ;ADD WORD NUMBER WITHIN SCANLINE
SUBI C,17
NOTDOT: CAMGE C,[-20]
FOOL: MOVE C,[-20]
CAILE C,40
FOOG: MOVEI C,40
MOVE D,T4(C)
MOVE 0,T1(C)
LBM1: ADDM 0,-1(T) ;CHANGED TO LINE BUFFER-1
MOVE 0,T2(C)
LB: ADDM 0,(T) ;CHANGED TO LINE BUFFER
MOVE C,T3(C)
LBP1: EXCH C,1(T) ;CHANGED TO LINE BUFFER+1
AOBJN T,YLP2
ADD E,DELX
AOBJN X1,XLP2
MOVE THIS,LINB
PUSHJ P,CORREL
JRST @HAFUP
END